<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>nih: sampling/sampler.h Source File</title>

<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { searchBox.OnSelectItem(0); });
</script>

</head>
<body>
<div id="top"><!-- do not remove this div! -->


<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  
  
  <td style="padding-left: 0.5em;">
   <div id="projectname">nih
   &#160;<span id="projectnumber">0.5</span>
   </div>
   
  </td>
  
  
  
 </tr>
 </tbody>
</table>
</div>

<!-- Generated by Doxygen 1.7.5.1 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="modules.html"><span>Modules</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="files.html"><span>File&#160;List</span></a></li>
    </ul>
  </div>
</div>
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
  initNavTree('sampler_8h.html','');
</script>
<div id="doc-content">
<div class="header">
  <div class="headertitle">
<div class="title">sampling/sampler.h</div>  </div>
</div>
<div class="contents">
<a href="sampler_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
<a name="l00002"></a>00002 <span class="comment"> * Copyright (c) 2010-2011, NVIDIA Corporation</span>
<a name="l00003"></a>00003 <span class="comment"> * All rights reserved.</span>
<a name="l00004"></a>00004 <span class="comment"> *</span>
<a name="l00005"></a>00005 <span class="comment"> * Redistribution and use in source and binary forms, with or without</span>
<a name="l00006"></a>00006 <span class="comment"> * modification, are permitted provided that the following conditions are met:</span>
<a name="l00007"></a>00007 <span class="comment"> *   * Redistributions of source code must retain the above copyright</span>
<a name="l00008"></a>00008 <span class="comment"> *     notice, this list of conditions and the following disclaimer.</span>
<a name="l00009"></a>00009 <span class="comment"> *   * Redistributions in binary form must reproduce the above copyright</span>
<a name="l00010"></a>00010 <span class="comment"> *     notice, this list of conditions and the following disclaimer in the</span>
<a name="l00011"></a>00011 <span class="comment"> *     documentation and/or other materials provided with the distribution.</span>
<a name="l00012"></a>00012 <span class="comment"> *   * Neither the name of NVIDIA Corporation nor the</span>
<a name="l00013"></a>00013 <span class="comment"> *     names of its contributors may be used to endorse or promote products</span>
<a name="l00014"></a>00014 <span class="comment"> *     derived from this software without specific prior written permission.</span>
<a name="l00015"></a>00015 <span class="comment"> *</span>
<a name="l00016"></a>00016 <span class="comment"> * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS &quot;AS IS&quot; AND</span>
<a name="l00017"></a>00017 <span class="comment"> * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED</span>
<a name="l00018"></a>00018 <span class="comment"> * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE</span>
<a name="l00019"></a>00019 <span class="comment"> * DISCLAIMED. IN NO EVENT SHALL &lt;COPYRIGHT HOLDER&gt; BE LIABLE FOR ANY</span>
<a name="l00020"></a>00020 <span class="comment"> * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES</span>
<a name="l00021"></a>00021 <span class="comment"> * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;</span>
<a name="l00022"></a>00022 <span class="comment"> * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND</span>
<a name="l00023"></a>00023 <span class="comment"> * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT</span>
<a name="l00024"></a>00024 <span class="comment"> * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS</span>
<a name="l00025"></a>00025 <span class="comment"> * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.</span>
<a name="l00026"></a>00026 <span class="comment"> */</span>
<a name="l00027"></a>00027 
<a name="l00039"></a>00039 <span class="preprocessor">#ifndef __NIH_SAMPLER_H</span>
<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#define __NIH_SAMPLER_H</span>
<a name="l00041"></a>00041 <span class="preprocessor"></span>
<a name="l00042"></a>00042 <span class="preprocessor">#include &lt;<a class="code" href="vector_8h.html" title="Define linear-algebra vector classes.">nih/linalg/vector.h</a>&gt;</span>
<a name="l00043"></a>00043 <span class="preprocessor">#include &lt;<a class="code" href="random_8h.html" title="Defines a random number generator class.">nih/sampling/random.h</a>&gt;</span>
<a name="l00044"></a>00044 <span class="preprocessor">#include &lt;vector&gt;</span>
<a name="l00045"></a>00045 <span class="preprocessor">#include &lt;algorithm&gt;</span>
<a name="l00046"></a>00046 
<a name="l00047"></a>00047 
<a name="l00048"></a>00048 <span class="keyword">namespace </span>nih {
<a name="l00049"></a>00049 
<a name="l00054"></a>00054 
<a name="l00055"></a>00055 
<a name="l00056"></a>00056 
<a name="l00057"></a>00057 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Iterator&gt;
<a name="l00058"></a><a class="code" href="structnih_1_1_sample__vector.html">00058</a> <span class="keyword">struct </span><a class="code" href="structnih_1_1_sample__vector.html">Sample_vector</a>
<a name="l00059"></a>00059 {
<a name="l00060"></a>00060     <a class="code" href="structnih_1_1_sample__vector.html">Sample_vector</a>(Iterator samples, <span class="keyword">const</span> uint32 stride) :
<a name="l00061"></a>00061         m_samples( samples ), m_stride( stride ) {}
<a name="l00062"></a>00062 
<a name="l00063"></a>00063     <span class="keywordtype">float</span> next()
<a name="l00064"></a>00064     {
<a name="l00065"></a>00065         <span class="keyword">const</span> <span class="keywordtype">float</span> value = *m_samples;
<a name="l00066"></a>00066         m_samples += m_stride;
<a name="l00067"></a>00067         <span class="keywordflow">return</span> value;
<a name="l00068"></a>00068     }
<a name="l00069"></a>00069 
<a name="l00070"></a>00070     Iterator m_samples;
<a name="l00071"></a>00071     uint32   m_stride;
<a name="l00072"></a>00072 };
<a name="l00073"></a>00073 
<a name="l00079"></a>00079 uint32 <a class="code" href="group__sampling.html#ga7f85d8d007bbaa744e558171b0064b8e">sample_cdf</a>(
<a name="l00080"></a>00080         <span class="keyword">const</span> <span class="keywordtype">float</span>                                     x,
<a name="l00081"></a>00081         <span class="keyword">const</span> std::vector&lt;float&gt;&amp;       cdf,
<a name="l00082"></a>00082         <span class="keywordtype">float</span>&amp;                                          pdf);
<a name="l00083"></a>00083 
<a name="l00089"></a>00089 uint32 <a class="code" href="group__sampling.html#ga7f85d8d007bbaa744e558171b0064b8e">sample_cdf</a>(
<a name="l00090"></a>00090         <span class="keyword">const</span> <span class="keywordtype">float</span>                                     x,
<a name="l00091"></a>00091         <span class="keyword">const</span> uint32                            n,
<a name="l00092"></a>00092         <span class="keyword">const</span> <span class="keywordtype">float</span>*                            cdf,
<a name="l00093"></a>00093         <span class="keywordtype">float</span>&amp;                                          pdf);
<a name="l00094"></a>00094 
<a name="l00100"></a>00100 <span class="keywordtype">float</span> <a class="code" href="group__sampling.html#ga2ba33066ab272bd8b90be1046198a124">sample_cdf_cont</a>(
<a name="l00101"></a>00101         <span class="keyword">const</span> <span class="keywordtype">float</span>                                     x,
<a name="l00102"></a>00102         <span class="keyword">const</span> std::vector&lt;float&gt;&amp;       cdf,
<a name="l00103"></a>00103         <span class="keywordtype">float</span>&amp;                                          pdf);
<a name="l00104"></a>00104 
<a name="l00108"></a><a class="code" href="structnih_1_1_sampler.html">00108</a> <span class="keyword">struct </span><a class="code" href="structnih_1_1_sampler.html">Sampler</a>
<a name="l00109"></a>00109 {
<a name="l00112"></a>00112         <span class="keywordtype">void</span> <a class="code" href="structnih_1_1_sampler.html#a393317f10a5ada969a41cf1f037bc900">sample</a>(
<a name="l00113"></a>00113                 <span class="keyword">const</span> uint32    num_samples,
<a name="l00114"></a>00114                 uint32*                 samples);
<a name="l00115"></a>00115 
<a name="l00118"></a>00118         <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;
<a name="l00119"></a>00119         <span class="keywordtype">void</span> <a class="code" href="structnih_1_1_sampler.html#a393317f10a5ada969a41cf1f037bc900">sample</a>(
<a name="l00120"></a>00120                 <span class="keyword">const</span> uint32    num_samples,
<a name="l00121"></a>00121                 T*                              samples);
<a name="l00122"></a>00122 
<a name="l00125"></a>00125         <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;
<a name="l00126"></a>00126         <span class="keywordtype">void</span> <a class="code" href="structnih_1_1_sampler.html#a393317f10a5ada969a41cf1f037bc900">sample</a>(
<a name="l00127"></a>00127                 <span class="keyword">const</span> uint32    num_samples,
<a name="l00128"></a>00128                 <a class="code" href="structnih_1_1_vector_3_01_t_00_012_01_4.html">Vector&lt;T,2&gt;</a>*    samples);
<a name="l00129"></a>00129 
<a name="l00132"></a>00132         <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;
<a name="l00133"></a>00133         <span class="keywordtype">void</span> <a class="code" href="structnih_1_1_sampler.html#a393317f10a5ada969a41cf1f037bc900">sample</a>(
<a name="l00134"></a>00134                 <span class="keyword">const</span> uint32    num_samples,
<a name="l00135"></a>00135                 <a class="code" href="structnih_1_1_vector_3_01_t_00_013_01_4.html">Vector&lt;T,3&gt;</a>*    samples);
<a name="l00136"></a>00136 
<a name="l00139"></a>00139         <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;
<a name="l00140"></a>00140         <span class="keywordtype">void</span> <a class="code" href="structnih_1_1_sampler.html#a393317f10a5ada969a41cf1f037bc900">sample</a>(
<a name="l00141"></a>00141                 <span class="keyword">const</span> uint32    num_samples,
<a name="l00142"></a>00142                 <a class="code" href="structnih_1_1_vector_3_01_t_00_014_01_4.html">Vector&lt;T,4&gt;</a>*    samples);
<a name="l00143"></a>00143 
<a name="l00146"></a>00146         <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Image_type&gt;
<a name="l00147"></a>00147         <span class="keywordtype">void</span> <a class="code" href="structnih_1_1_sampler.html#a393317f10a5ada969a41cf1f037bc900">sample</a>(
<a name="l00148"></a>00148                 <span class="keyword">const</span> uint32    num_samples,
<a name="l00149"></a>00149                 <span class="keyword">const</span> uint32    num_dims,
<a name="l00150"></a>00150                 Image_type&amp;             samples);
<a name="l00151"></a>00151 
<a name="l00152"></a>00152         std::vector&lt;uint32&gt;     m_sample_x;
<a name="l00153"></a>00153         std::vector&lt;uint32&gt;     m_sample_y;
<a name="l00154"></a>00154         <a class="code" href="classnih_1_1_random.html">Random</a>                          m_random;
<a name="l00155"></a>00155 };
<a name="l00156"></a>00156 
<a name="l00160"></a><a class="code" href="structnih_1_1_m_j_sampler.html">00160</a> <span class="keyword">struct </span><a class="code" href="structnih_1_1_m_j_sampler.html">MJSampler</a>
<a name="l00161"></a>00161 {
<a name="l00162"></a>00162         <span class="keyword">enum</span> Ordering
<a name="l00163"></a>00163         {
<a name="l00164"></a>00164                 kXY,
<a name="l00165"></a>00165                 kRandom
<a name="l00166"></a>00166         };
<a name="l00167"></a>00167 
<a name="l00170"></a>00170         <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;
<a name="l00171"></a>00171         <span class="keywordtype">void</span> <a class="code" href="structnih_1_1_m_j_sampler.html#a7efa9e4be3bfab3bbeb2c0e1d293f608">sample</a>(
<a name="l00172"></a>00172                 <span class="keyword">const</span> uint32    samples_x,
<a name="l00173"></a>00173                 <span class="keyword">const</span> uint32    samples_y,
<a name="l00174"></a>00174                 <a class="code" href="structnih_1_1_vector_3_01_t_00_012_01_4.html">Vector&lt;T,2&gt;</a>*    samples,
<a name="l00175"></a>00175                 Ordering                ordering = kRandom);
<a name="l00176"></a>00176 
<a name="l00180"></a>00180         <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;
<a name="l00181"></a>00181         <span class="keywordtype">void</span> <a class="code" href="structnih_1_1_m_j_sampler.html#a7efa9e4be3bfab3bbeb2c0e1d293f608">sample</a>(
<a name="l00182"></a>00182                 <span class="keyword">const</span> uint32    samples_x,
<a name="l00183"></a>00183                 <span class="keyword">const</span> uint32    samples_y,
<a name="l00184"></a>00184                 <a class="code" href="structnih_1_1_vector_3_01_t_00_013_01_4.html">Vector&lt;T,3&gt;</a>*    samples);
<a name="l00185"></a>00185 
<a name="l00188"></a>00188         <span class="keyword">template</span> &lt;<span class="keyword">typename</span> T&gt;
<a name="l00189"></a>00189         <span class="keywordtype">void</span> <a class="code" href="structnih_1_1_m_j_sampler.html#a7efa9e4be3bfab3bbeb2c0e1d293f608">sample</a>(
<a name="l00190"></a>00190                 <span class="keyword">const</span> uint32    samples_x,
<a name="l00191"></a>00191                 <span class="keyword">const</span> uint32    samples_y,
<a name="l00192"></a>00192                 <a class="code" href="structnih_1_1_vector_3_01_t_00_014_01_4.html">Vector&lt;T,4&gt;</a>*    samples,
<a name="l00193"></a>00193                 Ordering                ordering = kRandom);
<a name="l00194"></a>00194 
<a name="l00195"></a><a class="code" href="structnih_1_1_m_j_sampler_1_1_sample.html">00195</a>         <span class="keyword">struct </span><a class="code" href="structnih_1_1_m_j_sampler_1_1_sample.html">Sample</a>
<a name="l00196"></a>00196         {
<a name="l00197"></a>00197                 uint32 x;
<a name="l00198"></a>00198                 uint32 y;
<a name="l00199"></a>00199         };
<a name="l00200"></a>00200         std::vector&lt;Sample&gt; m_sample_xy;
<a name="l00201"></a>00201         <a class="code" href="classnih_1_1_random.html">Random</a>                          m_random;
<a name="l00202"></a>00202 };
<a name="l00203"></a>00203 
<a name="l00204"></a>00204 
<a name="l00209"></a>00209 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Image_type&gt;
<a name="l00210"></a><a class="code" href="classnih_1_1_sample__combiner.html">00210</a> <span class="keyword">class </span><a class="code" href="classnih_1_1_sample__combiner.html">Sample_combiner</a>
<a name="l00211"></a>00211 {
<a name="l00212"></a>00212 <span class="keyword">public</span>:
<a name="l00213"></a><a class="code" href="structnih_1_1_sample__combiner_1_1_row.html">00213</a>         <span class="keyword">struct </span><a class="code" href="structnih_1_1_sample__combiner_1_1_row.html">Row</a>
<a name="l00214"></a>00214         {
<a name="l00216"></a><a class="code" href="structnih_1_1_sample__combiner_1_1_row.html#a80c38a578ae1a9e15c545258ea7d6773">00216</a>                 <a class="code" href="structnih_1_1_sample__combiner_1_1_row.html#a80c38a578ae1a9e15c545258ea7d6773" title="constructor">Row</a>(<span class="keyword">const</span> <a class="code" href="classnih_1_1_sample__combiner.html">Sample_combiner</a>* sc, <span class="keyword">const</span> uint32 x, <span class="keyword">const</span> uint32 y) :
<a name="l00217"></a>00217                         m_sc( sc ), m_x( x ), m_y( y ), m_off( 0u ) {}
<a name="l00218"></a>00218 
<a name="l00220"></a><a class="code" href="structnih_1_1_sample__combiner_1_1_row.html#a55ad121165bdfda2b5ea9245065602c1">00220</a>                 <a class="code" href="structnih_1_1_sample__combiner_1_1_row.html#a80c38a578ae1a9e15c545258ea7d6773" title="constructor">Row</a>(<span class="keyword">const</span> <a class="code" href="classnih_1_1_sample__combiner.html">Sample_combiner</a>* sc, <span class="keyword">const</span> uint32 x, <span class="keyword">const</span> uint32 y, <span class="keyword">const</span> uint32 off) :
<a name="l00221"></a>00221                         m_sc( sc ), m_x( x ), m_y( y ), m_off( off ) {}
<a name="l00222"></a>00222 
<a name="l00224"></a><a class="code" href="structnih_1_1_sample__combiner_1_1_row.html#a8833bfd54782632fa16ce52ccb2867c5">00224</a>                 <span class="keywordtype">float</span> <a class="code" href="structnih_1_1_sample__combiner_1_1_row.html#a8833bfd54782632fa16ce52ccb2867c5" title="return the d-th component of the row">operator[] </a>(<span class="keyword">const</span> uint32 d)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (*m_sc)( m_x, m_y, m_off + d ); }
<a name="l00225"></a>00225 
<a name="l00226"></a>00226         <span class="comment">// this operator is very fishy: it makes the Row act as a float*, rather than as an iterator</span>
<a name="l00227"></a>00227                 <a class="code" href="structnih_1_1_sample__combiner_1_1_row.html">Row</a> operator+ (<span class="keyword">const</span> uint32 off)<span class="keyword"> const </span>{
<a name="l00228"></a>00228                         <span class="keywordflow">return</span> <a class="code" href="structnih_1_1_sample__combiner_1_1_row.html#a80c38a578ae1a9e15c545258ea7d6773" title="constructor">Row</a>( m_sc, m_x, m_y, m_off + off );
<a name="l00229"></a>00229                 }
<a name="l00230"></a>00230 
<a name="l00231"></a>00231                 uint32 m_x;
<a name="l00232"></a>00232                 uint32 m_y;
<a name="l00233"></a>00233                 uint32 m_off;
<a name="l00234"></a>00234                 <span class="keyword">const</span> <a class="code" href="classnih_1_1_sample__combiner.html">Sample_combiner</a>* m_sc;
<a name="l00235"></a>00235         };
<a name="l00236"></a>00236 
<a name="l00239"></a><a class="code" href="classnih_1_1_sample__combiner.html#a22367618b733b1f0479cdd9cb8aa2ece">00239</a>         <a class="code" href="classnih_1_1_sample__combiner.html#a22367618b733b1f0479cdd9cb8aa2ece">Sample_combiner</a>() : m_X(NULL), m_Y(NULL) {}
<a name="l00240"></a>00240 
<a name="l00243"></a><a class="code" href="classnih_1_1_sample__combiner.html#a4219ba03678b5284ef80f469b805bdda">00243</a>         <a class="code" href="classnih_1_1_sample__combiner.html#a22367618b733b1f0479cdd9cb8aa2ece">Sample_combiner</a>(
<a name="l00244"></a>00244                 <span class="keyword">const</span> Image_type&amp; X,
<a name="l00245"></a>00245                 <span class="keyword">const</span> Image_type&amp; Y)
<a name="l00246"></a>00246                 : m_X( &amp;X ), m_Y( &amp;Y )
<a name="l00247"></a>00247         {
<a name="l00248"></a>00248                 m_X_res = m_X-&gt;rows();
<a name="l00249"></a>00249                 m_Y_res = m_Y-&gt;rows();
<a name="l00250"></a>00250                 m_dim   = <a class="code" href="group__vectors.html#gab2b34b1991185fc29890973777b60e54">std::max</a>( m_X-&gt;cols(), m_Y-&gt;cols() );
<a name="l00251"></a>00251         }
<a name="l00252"></a>00252 
<a name="l00255"></a><a class="code" href="classnih_1_1_sample__combiner.html#a874efd345d08e22acb0fb1dc5c0f1b99">00255</a>         uint32 <a class="code" href="classnih_1_1_sample__combiner.html#a874efd345d08e22acb0fb1dc5c0f1b99">rows</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classnih_1_1_sample__combiner.html#a880fb4d91c5a00af955d920c4dd196e7">size</a>(); }
<a name="l00256"></a>00256 
<a name="l00259"></a><a class="code" href="classnih_1_1_sample__combiner.html#aecae5146a02af2bbac2884de97e18d33">00259</a>         uint32 <a class="code" href="classnih_1_1_sample__combiner.html#aecae5146a02af2bbac2884de97e18d33">cols</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_dim; }
<a name="l00260"></a>00260 
<a name="l00263"></a><a class="code" href="classnih_1_1_sample__combiner.html#a75099a4a1489baba07431d31b92d543b">00263</a>         uint32 <a class="code" href="classnih_1_1_sample__combiner.html#a75099a4a1489baba07431d31b92d543b">primary_size</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_X_res; }
<a name="l00264"></a>00264 
<a name="l00267"></a><a class="code" href="classnih_1_1_sample__combiner.html#aad15a68a7b87de7414f221b02848596d">00267</a>         uint32 <a class="code" href="classnih_1_1_sample__combiner.html#aad15a68a7b87de7414f221b02848596d">secondary_size</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_Y_res; }
<a name="l00268"></a>00268 
<a name="l00271"></a><a class="code" href="classnih_1_1_sample__combiner.html#a880fb4d91c5a00af955d920c4dd196e7">00271</a>         uint32 <a class="code" href="classnih_1_1_sample__combiner.html#a880fb4d91c5a00af955d920c4dd196e7">size</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_X_res * m_Y_res; }
<a name="l00272"></a>00272 
<a name="l00275"></a><a class="code" href="classnih_1_1_sample__combiner.html#ac3e27a1dd31287bc8d499e4a41caaf45">00275</a>         <span class="keywordtype">float</span> <a class="code" href="classnih_1_1_sample__combiner.html#ac3e27a1dd31287bc8d499e4a41caaf45">operator() </a>(<span class="keyword">const</span> uint32 d, <span class="keyword">const</span> uint32 i)<span class="keyword"> const</span>
<a name="l00276"></a>00276 <span class="keyword">        </span>{
<a name="l00277"></a>00277                 <span class="keyword">const</span> uint32 x = i % m_X_res;
<a name="l00278"></a>00278                 <span class="keyword">const</span> uint32 y = i / m_X_res;
<a name="l00279"></a>00279 
<a name="l00280"></a>00280                 <span class="keywordflow">return</span> <a class="code" href="classnih_1_1_sample__combiner.html#ac3e27a1dd31287bc8d499e4a41caaf45">operator()</a>(x,y,d);
<a name="l00281"></a>00281         }
<a name="l00284"></a><a class="code" href="classnih_1_1_sample__combiner.html#a9c937c9bdd0bd33d3957e4811fd01cca">00284</a>         <span class="keywordtype">float</span> <a class="code" href="classnih_1_1_sample__combiner.html#ac3e27a1dd31287bc8d499e4a41caaf45">operator() </a>(<span class="keyword">const</span> uint32 x, <span class="keyword">const</span> uint32 y, <span class="keyword">const</span> uint32 d)<span class="keyword"> const</span>
<a name="l00285"></a>00285 <span class="keyword">        </span>{
<a name="l00286"></a>00286                 <span class="keyword">const</span> <span class="keywordtype">float</span> z = (d &lt; m_Y-&gt;cols()) ? (*m_Y)[y][d] : 0.0f;
<a name="l00287"></a>00287                 <span class="keywordflow">return</span> fmodf( (*m_X)[x][d] + z, 1.0f );
<a name="l00288"></a>00288         }
<a name="l00291"></a><a class="code" href="classnih_1_1_sample__combiner.html#a2a4ab922122f90d3f9f0264aaf09bcfc">00291</a>         <a class="code" href="structnih_1_1_sample__combiner_1_1_row.html">Row</a> <a class="code" href="classnih_1_1_sample__combiner.html#a2a4ab922122f90d3f9f0264aaf09bcfc">operator[] </a>(<span class="keyword">const</span> uint32 i)<span class="keyword"> const</span>
<a name="l00292"></a>00292 <span class="keyword">        </span>{
<a name="l00293"></a>00293                 <span class="keyword">const</span> uint32 x = i % m_X_res;
<a name="l00294"></a>00294                 <span class="keyword">const</span> uint32 y = i / m_X_res;
<a name="l00295"></a>00295                 <span class="keywordflow">return</span> <a class="code" href="structnih_1_1_sample__combiner_1_1_row.html">Row</a>( <span class="keyword">this</span>, x, y );
<a name="l00296"></a>00296         }
<a name="l00297"></a>00297 
<a name="l00298"></a>00298 <span class="keyword">private</span>:
<a name="l00299"></a>00299         uint32                          m_X_res;
<a name="l00300"></a>00300         uint32                          m_Y_res;
<a name="l00301"></a>00301         uint32                          m_dim;
<a name="l00302"></a>00302         <span class="keyword">const</span> Image_type*       m_X;
<a name="l00303"></a>00303         <span class="keyword">const</span> Image_type*       m_Y;
<a name="l00304"></a>00304 };
<a name="l00305"></a>00305 
<a name="l00309"></a>00309 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Image_type1, <span class="keyword">typename</span> Image_type2&gt;
<a name="l00310"></a><a class="code" href="classnih_1_1_sample__layer.html">00310</a> <span class="keyword">class </span><a class="code" href="classnih_1_1_sample__layer.html">Sample_layer</a>
<a name="l00311"></a>00311 {
<a name="l00312"></a>00312 <span class="keyword">public</span>:
<a name="l00313"></a><a class="code" href="structnih_1_1_sample__layer_1_1_row.html">00313</a>         <span class="keyword">struct </span><a class="code" href="structnih_1_1_sample__layer_1_1_row.html">Row</a>
<a name="l00314"></a>00314         {
<a name="l00316"></a><a class="code" href="structnih_1_1_sample__layer_1_1_row.html#a38626e601bea2897b6e8cedfbd26f1b1">00316</a>                 <a class="code" href="structnih_1_1_sample__layer_1_1_row.html#a38626e601bea2897b6e8cedfbd26f1b1" title="constructor">Row</a>(<span class="keyword">const</span> <a class="code" href="classnih_1_1_sample__layer.html">Sample_layer</a>* sc, <span class="keyword">const</span> uint32 x) :
<a name="l00317"></a>00317                         m_sc( sc ), m_x( x ), m_off( 0u ) {}
<a name="l00318"></a>00318 
<a name="l00320"></a><a class="code" href="structnih_1_1_sample__layer_1_1_row.html#ae1ed6c22526410ff5ecc1770beb4d1d8">00320</a>                 <a class="code" href="structnih_1_1_sample__layer_1_1_row.html#a38626e601bea2897b6e8cedfbd26f1b1" title="constructor">Row</a>(<span class="keyword">const</span> <a class="code" href="classnih_1_1_sample__layer.html">Sample_layer</a>* sc, <span class="keyword">const</span> uint32 x, <span class="keyword">const</span> uint32 off) :
<a name="l00321"></a>00321                         m_sc( sc ), m_x( x ), m_off( off ) {}
<a name="l00322"></a>00322 
<a name="l00324"></a><a class="code" href="structnih_1_1_sample__layer_1_1_row.html#ab7d1af01ea89777966ad790cce4062e7">00324</a>                 <span class="keywordtype">float</span> <a class="code" href="structnih_1_1_sample__layer_1_1_row.html#ab7d1af01ea89777966ad790cce4062e7" title="return the d-th component of the row">operator[] </a>(<span class="keyword">const</span> uint32 d)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (*m_sc)( m_off + d, m_x ); }
<a name="l00325"></a>00325 
<a name="l00326"></a>00326         <span class="comment">// this operator is very fishy: it makes the Row act as a float*, rather than as an iterator</span>
<a name="l00327"></a>00327                 <a class="code" href="structnih_1_1_sample__layer_1_1_row.html">Row</a> operator+ (<span class="keyword">const</span> uint32 off)<span class="keyword"> const </span>{
<a name="l00328"></a>00328                         <span class="keywordflow">return</span> <a class="code" href="structnih_1_1_sample__layer_1_1_row.html#a38626e601bea2897b6e8cedfbd26f1b1" title="constructor">Row</a>( m_sc, m_x, m_off + off );
<a name="l00329"></a>00329                 }
<a name="l00330"></a>00330 
<a name="l00331"></a>00331                 uint32 m_x;
<a name="l00332"></a>00332                 uint32 m_off;
<a name="l00333"></a>00333                 <span class="keyword">const</span> <a class="code" href="classnih_1_1_sample__layer.html">Sample_layer</a>* m_sc;
<a name="l00334"></a>00334         };
<a name="l00335"></a>00335 
<a name="l00337"></a><a class="code" href="classnih_1_1_sample__layer.html#a124dbfce20926ed15b090bbb72ee1013">00337</a>         <a class="code" href="classnih_1_1_sample__layer.html#a124dbfce20926ed15b090bbb72ee1013" title="constructor">Sample_layer</a>() : m_X(NULL), m_Y(NULL) {}
<a name="l00338"></a>00338 
<a name="l00340"></a><a class="code" href="classnih_1_1_sample__layer.html#a46ae62ad1e481e929fdf00584fd4bc77">00340</a>         <a class="code" href="classnih_1_1_sample__layer.html#a124dbfce20926ed15b090bbb72ee1013" title="constructor">Sample_layer</a>(
<a name="l00341"></a>00341                 <span class="keyword">const</span> Image_type1&amp; X,
<a name="l00342"></a>00342                 <span class="keyword">const</span> Image_type2&amp; Y)
<a name="l00343"></a>00343                 : m_X( &amp;X ), m_Y( &amp;Y )
<a name="l00344"></a>00344         {
<a name="l00345"></a>00345                 m_X_dim = m_X-&gt;cols();
<a name="l00346"></a>00346                 m_Y_dim = m_Y-&gt;cols();
<a name="l00347"></a>00347                 m_res   = m_X-&gt;rows();
<a name="l00348"></a>00348         }
<a name="l00349"></a>00349 
<a name="l00352"></a><a class="code" href="classnih_1_1_sample__layer.html#ad7845baacb43dfa554ebe376fafdcdf6">00352</a>         uint32 <a class="code" href="classnih_1_1_sample__layer.html#ad7845baacb43dfa554ebe376fafdcdf6">rows</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="classnih_1_1_sample__layer.html#a86e7d9f4bda99fece5985a5d45368060">size</a>(); }
<a name="l00353"></a>00353 
<a name="l00356"></a><a class="code" href="classnih_1_1_sample__layer.html#a6b936d7e4f23aedce39b7e647cce555f">00356</a>         uint32 <a class="code" href="classnih_1_1_sample__layer.html#a6b936d7e4f23aedce39b7e647cce555f">cols</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_X_dim + m_Y_dim; }
<a name="l00357"></a>00357 
<a name="l00360"></a><a class="code" href="classnih_1_1_sample__layer.html#a86e7d9f4bda99fece5985a5d45368060">00360</a>         uint32 <a class="code" href="classnih_1_1_sample__layer.html#a86e7d9f4bda99fece5985a5d45368060">size</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_res; }
<a name="l00361"></a>00361 
<a name="l00364"></a><a class="code" href="classnih_1_1_sample__layer.html#ae69a60903be4c8215bc266e3d8c24a3e">00364</a>         <span class="keywordtype">float</span> <a class="code" href="classnih_1_1_sample__layer.html#ae69a60903be4c8215bc266e3d8c24a3e">operator() </a>(<span class="keyword">const</span> uint32 d, <span class="keyword">const</span> uint32 i)<span class="keyword"> const</span>
<a name="l00365"></a>00365 <span class="keyword">        </span>{
<a name="l00366"></a>00366                 <span class="keywordflow">return</span> d &lt; m_X_dim ? (*m_X)(d,i) : (*m_Y)(d,i);
<a name="l00367"></a>00367         }
<a name="l00370"></a><a class="code" href="classnih_1_1_sample__layer.html#a5e4e5f18b56cb17fcc49f18983a016b0">00370</a>         <a class="code" href="structnih_1_1_sample__layer_1_1_row.html">Row</a> <a class="code" href="classnih_1_1_sample__layer.html#a5e4e5f18b56cb17fcc49f18983a016b0">operator[] </a>(<span class="keyword">const</span> uint32 i)<span class="keyword"> const</span>
<a name="l00371"></a>00371 <span class="keyword">        </span>{
<a name="l00372"></a>00372                 <span class="keywordflow">return</span> <a class="code" href="structnih_1_1_sample__layer_1_1_row.html">Row</a>( <span class="keyword">this</span>, i );
<a name="l00373"></a>00373         }
<a name="l00374"></a>00374 
<a name="l00375"></a>00375 <span class="keyword">private</span>:
<a name="l00376"></a>00376         uint32                          m_res;
<a name="l00377"></a>00377         uint32                          m_X_dim;
<a name="l00378"></a>00378         uint32                          m_Y_dim;
<a name="l00379"></a>00379         <span class="keyword">const</span> Image_type1*      m_X;
<a name="l00380"></a>00380         <span class="keyword">const</span> Image_type2*      m_Y;
<a name="l00381"></a>00381 };
<a name="l00382"></a>00382 
<a name="l00386"></a>00386 <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Image_type&gt;
<a name="l00387"></a><a class="code" href="classnih_1_1_sample__window.html">00387</a> <span class="keyword">class </span><a class="code" href="classnih_1_1_sample__window.html">Sample_window</a>
<a name="l00388"></a>00388 {
<a name="l00389"></a>00389 <span class="keyword">public</span>:
<a name="l00390"></a><a class="code" href="structnih_1_1_sample__window_1_1_row.html">00390</a>         <span class="keyword">struct </span><a class="code" href="structnih_1_1_sample__window_1_1_row.html">Row</a>
<a name="l00391"></a>00391         {
<a name="l00393"></a><a class="code" href="structnih_1_1_sample__window_1_1_row.html#ad56f15f4c11efe9b93fc636436b4ac16">00393</a>                 <a class="code" href="structnih_1_1_sample__window_1_1_row.html#ad56f15f4c11efe9b93fc636436b4ac16" title="constructor">Row</a>(<span class="keyword">const</span> <a class="code" href="classnih_1_1_sample__window.html">Sample_window</a>* sc, <span class="keyword">const</span> uint32 y, <span class="keyword">const</span> uint32 x = 0) :
<a name="l00394"></a>00394                         m_sc( sc ), m_y( y ), m_x( x ) {}
<a name="l00395"></a>00395 
<a name="l00397"></a><a class="code" href="structnih_1_1_sample__window_1_1_row.html#a10357923063972e3b6f862fa69066acd">00397</a>                 <span class="keywordtype">float</span> <a class="code" href="structnih_1_1_sample__window_1_1_row.html#a10357923063972e3b6f862fa69066acd" title="return the d-th component of the row">operator[] </a>(<span class="keyword">const</span> uint32 d)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> (*m_sc)( m_x + d, m_y ); }
<a name="l00398"></a>00398 
<a name="l00399"></a>00399         <span class="comment">// this operator is very fishy: it makes the Row act as a float*, rather than as an iterator</span>
<a name="l00400"></a>00400                 <a class="code" href="structnih_1_1_sample__window_1_1_row.html">Row</a> operator+ (<span class="keyword">const</span> uint32 off)<span class="keyword"> const </span>{
<a name="l00401"></a>00401                         <span class="keywordflow">return</span> <a class="code" href="structnih_1_1_sample__window_1_1_row.html#ad56f15f4c11efe9b93fc636436b4ac16" title="constructor">Row</a>( m_sc, m_y, m_x + off );
<a name="l00402"></a>00402                 }
<a name="l00403"></a>00403 
<a name="l00404"></a>00404         uint32                  m_y;
<a name="l00405"></a>00405         uint32                  m_x;
<a name="l00406"></a>00406                 <span class="keyword">const</span> <a class="code" href="classnih_1_1_sample__window.html">Sample_window</a>*    m_sc;
<a name="l00407"></a>00407         };
<a name="l00408"></a>00408 
<a name="l00411"></a><a class="code" href="classnih_1_1_sample__window.html#aa12be238726bcf76f72449060af48667">00411</a>         <a class="code" href="classnih_1_1_sample__window.html#aa12be238726bcf76f72449060af48667">Sample_window</a>() : m_X(NULL), m_Y(NULL) {}
<a name="l00412"></a>00412 
<a name="l00415"></a><a class="code" href="classnih_1_1_sample__window.html#a72a4940dca015579b6ca138529b72df9">00415</a>         <a class="code" href="classnih_1_1_sample__window.html#aa12be238726bcf76f72449060af48667">Sample_window</a>(
<a name="l00416"></a>00416                 <span class="keyword">const</span> Image_type&amp; X,
<a name="l00417"></a>00417         <span class="keyword">const</span> uint32 x_min,
<a name="l00418"></a>00418         <span class="keyword">const</span> uint32 x_max,
<a name="l00419"></a>00419         <span class="keyword">const</span> uint32 y_min,
<a name="l00420"></a>00420         <span class="keyword">const</span> uint32 y_max) :
<a name="l00421"></a>00421         m_X( &amp;X ),
<a name="l00422"></a>00422         m_x_min( x_min ),
<a name="l00423"></a>00423         m_x_max( x_max ),
<a name="l00424"></a>00424         m_y_min( y_min ),
<a name="l00425"></a>00425         m_y_max( y_max )
<a name="l00426"></a>00426         {
<a name="l00427"></a>00427         m_cols = m_x_max - m_x_min + 1u;
<a name="l00428"></a>00428         m_rows = m_y_max - m_y_min + 1u;
<a name="l00429"></a>00429         }
<a name="l00430"></a>00430 
<a name="l00433"></a><a class="code" href="classnih_1_1_sample__window.html#af849b55c2fa39c9e5cb778d3a9a3d532">00433</a>         uint32 <a class="code" href="classnih_1_1_sample__window.html#af849b55c2fa39c9e5cb778d3a9a3d532">rows</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_rows; }
<a name="l00434"></a>00434 
<a name="l00437"></a><a class="code" href="classnih_1_1_sample__window.html#a007cc41b50f9816fb80af1c09718b571">00437</a>         uint32 <a class="code" href="classnih_1_1_sample__window.html#a007cc41b50f9816fb80af1c09718b571">cols</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_cols; }
<a name="l00438"></a>00438 
<a name="l00441"></a><a class="code" href="classnih_1_1_sample__window.html#a4014f7b1128df057a162c1ceee7ef702">00441</a>         uint32 <a class="code" href="classnih_1_1_sample__window.html#a4014f7b1128df057a162c1ceee7ef702">size</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> m_rows; }
<a name="l00442"></a>00442 
<a name="l00445"></a><a class="code" href="classnih_1_1_sample__window.html#a24c29fe1b7efccda087cf5c7082b84ba">00445</a>         <span class="keywordtype">float</span> <a class="code" href="classnih_1_1_sample__window.html#a24c29fe1b7efccda087cf5c7082b84ba">operator() </a>(<span class="keyword">const</span> uint32 d, <span class="keyword">const</span> uint32 i)<span class="keyword"> const</span>
<a name="l00446"></a>00446 <span class="keyword">        </span>{
<a name="l00447"></a>00447                 <span class="keywordflow">return</span> (*m_X)(d + m_x_min, i + m_y_min);
<a name="l00448"></a>00448         }
<a name="l00451"></a><a class="code" href="classnih_1_1_sample__window.html#a8558d04069ecf2a4f28323a82b1b5cf0">00451</a>         <a class="code" href="structnih_1_1_sample__window_1_1_row.html">Row</a> <a class="code" href="classnih_1_1_sample__window.html#a8558d04069ecf2a4f28323a82b1b5cf0">operator[] </a>(<span class="keyword">const</span> uint32 i)<span class="keyword"> const</span>
<a name="l00452"></a>00452 <span class="keyword">        </span>{
<a name="l00453"></a>00453                 <span class="keywordflow">return</span> <a class="code" href="structnih_1_1_sample__window_1_1_row.html">Row</a>( <span class="keyword">this</span>, i );
<a name="l00454"></a>00454         }
<a name="l00455"></a>00455 
<a name="l00456"></a>00456 <span class="keyword">private</span>:
<a name="l00457"></a>00457     uint32              m_x_min;
<a name="l00458"></a>00458     uint32              m_x_max;
<a name="l00459"></a>00459     uint32              m_y_min;
<a name="l00460"></a>00460     uint32              m_y_max;
<a name="l00461"></a>00461         uint32                          m_cols;
<a name="l00462"></a>00462         uint32                          m_rows;
<a name="l00463"></a>00463         <span class="keyword">const</span> Image_type*       m_X;
<a name="l00464"></a>00464 };
<a name="l00465"></a>00465 
<a name="l00469"></a><a class="code" href="structnih_1_1_sample__transformation.html">00469</a> <span class="keyword">struct </span><a class="code" href="structnih_1_1_sample__transformation.html">Sample_transformation</a>
<a name="l00470"></a>00470 {
<a name="l00473"></a><a class="code" href="structnih_1_1_sample__transformation.html#a5ea3205a4d5816b2217a49f4fc7cb67a">00473</a>     <span class="keyword">virtual</span> <a class="code" href="structnih_1_1_sample__transformation.html#a5ea3205a4d5816b2217a49f4fc7cb67a">~Sample_transformation</a>() {}
<a name="l00474"></a>00474 
<a name="l00477"></a><a class="code" href="structnih_1_1_sample__transformation.html#a1eb5c9add857d79be3e5195d879b562c">00477</a>     <span class="keyword">virtual</span> <span class="keywordtype">float</span> <a class="code" href="structnih_1_1_sample__transformation.html#a1eb5c9add857d79be3e5195d879b562c">transform</a>(<span class="keywordtype">float</span>* pt)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> 1.0f; }
<a name="l00478"></a>00478 
<a name="l00481"></a><a class="code" href="structnih_1_1_sample__transformation.html#a60078fee0bead69f314a671cf1f47530">00481</a>     <span class="keyword">virtual</span> <span class="keywordtype">float</span> <a class="code" href="structnih_1_1_sample__transformation.html#a60078fee0bead69f314a671cf1f47530">density</a>(<span class="keywordtype">float</span>* pt)<span class="keyword"> const </span>{ <span class="keywordflow">return</span> 1.0f; }
<a name="l00482"></a>00482 };
<a name="l00483"></a>00483 
<a name="l00487"></a>00487 } <span class="comment">// namespace nih</span>
<a name="l00488"></a>00488 
<a name="l00489"></a>00489 <span class="preprocessor">#include &lt;nih/sampling/sampler_inline.h&gt;</span>
<a name="l00490"></a>00490 
<a name="l00491"></a>00491 <span class="preprocessor">#endif</span>
</pre></div></div>
</div>
  <div id="nav-path" class="navpath">
    <ul>
      <li class="navelem"><a class="el" href="sampler_8h.html">sampler.h</a>      </li>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Variables</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>


    <li class="footer">Generated on Thu Dec 15 2011 11:56:20 for nih by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.5.1 </li>
   </ul>
 </div>


</body>
</html>
